home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1999-05-29 | 11.8 KB | 471 lines |
- ' *************************************
- ' * *
- ' * Tubes V1.0 *
- ' * Written by Chris Hodges *
- ' * *
- ' *************************************
- '
- Hide
- Extension_8_0FF2 3
- Extension_8_0FF2 5
- Dim D(31,1)
- Dim F(12,9)
- Dim HISC(15,1),HISC$(15)
- LOAHISC
- Restore TUBES
- Dim P(12,4)
- VO=0 : TB=0
- Global D(),F(),P(),VO,TB,HISC(),HISC$()
- For A=0 To 12
- For B=0 To 4
- Read P(A,B)
- Next
- Next
- INIT
- SCORE=0
- Do
- TITLE
- Exit If Param
- LEVEL=1 : SCORE=0
- Do
- REBUILDGFX
- NUMTUBES=Min(15+LEVEL*5,130) : TIME=45+LEVEL*15 : LEVDIF=Max(400-LEVEL*30,50)
- SETTUBES
- WATERGO
- Exit If Param
- Inc LEVEL
- Loop
- GAMEOVER
- Loop
- QUIT
- End
- TUBES:
- Data 0,0,0,0,0
- Data 1,0,1,0,1
- Data 0,1,1,1,0
- Data 1,1,1,1,1
- Data 1,1,1,1,1
- Data 0,0,2,1,1
- Data 0,1,2,0,1
- Data 1,0,2,1,0
- Data 1,1,2,0,0
- Data 0,0,1,0,1
- Data 1,0,1,0,0
- Data 0,0,1,1,0
- Data 0,1,1,0,0
-
- Procedure INIT
- Screen Open 2,320,256,2,0 : Screen Hide
- Curs Off
- Extension_8_1204 10
- TB=Text Base
- Unpack 9 To 1 : Screen Hide
- For A=0 To 12
- Get Block A+1,A*16,0,16,16,1
- Get Bob A+1,A*16,0 To A*16+16,16
- Next
- For A=0 To 15
- Colour A+16, Extension_8_0EE8( Colour(A),$448,0 To $FFF)
- Next
- Screen Open 0,320,256,16,0
- Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
- For A=0 To 31 : Colour A,0 : Next
- End Proc
- Procedure QUIT
- Fade 1 : For A=0 To 15 : Multi Wait : Next
- Screen Close 1
- Screen Close 2
- Screen Close 0
- End Proc
- Procedure TITLE
- Shared SCORE,LEVEL
- Screen 2
- Get Palette 1
- For A=0 To 7 : Colour A, Extension_8_0EE8( Colour(A),-$222,0 To $FFF) : Next
- For A=0 To 7 : Colour A+8, Colour(A) : Next
- Screen 0
- Fade 1 : For A=0 To 15 : Multi Wait : Next
- Cls 0
- Screen Copy 1,0,16,320,80 To 0,0,0
- Ink 15,0 : Set Pattern -1
- Bar 0,64 To 320,256
- Put Block 6,0,64
- Put Block 7,304,64
- Put Block 8,0,240
- Put Block 9,304,240
- For A=1 To 18
- Put Block 3,A*16,64
- Put Block 3,A*16,240
- Next
- For A=5 To 14
- Put Block 2,0,A*16
- Put Block 2,304,A*16
- Next
- Extension_8_10C6 64
- Extension_8_10F2 0
- Extension_8_108E 3
- Fade 1 To 2 : For A=0 To 15 : Multi Wait : Next
- Clear Key
- PAG=0
- If SCORE>HISC(15,0) Then Gosub ENTERHISC
- Do
- If PAG=0 Then Gosub CREDIZ Else Gosub HISCORE
- Extension_8_128A 2
- Extension_8_12B2 2,0 To 0,3
- Extension_8_1258 : Wait Vbl
- Screen 2 : For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
- Fade 2 To 2
- For A=0 To 31 : Multi Wait : Next
- For A=0 To 199
- I$=Inkey$ : MK=Mouse Key
- Multi Wait
- Exit If I$<>"" or MK>0,2
- Next
- Screen 2 : For A=0 To 7 : Colour A+8, Colour(A) : Next : Screen 0
- Fade 1 To 2
- For A=0 To 15 : Multi Wait : Next
- PAG=1-PAG
- Loop
- For A=64 To 0 Step -2 : Extension_8_10C6 A : Multi Wait : Next
- Extension_8_10A8
- If I$=Chr$(27) Then Pop Proc[1]
- Pop Proc[0]
- ENTERHISC:
- For A=15 To 1 Step -1
- If SCORE>HISC(A,0) Then RANK=A Else Exit
- Next
- For A=14 To RANK Step -1
- HISC$(A+1)=HISC$(A)
- HISC(A+1,0)=HISC(A,0)
- HISC(A+1,1)=HISC(A,1)
- Next
- HISC$(RANK)=Space$(12)
- HISC(RANK,0)=SCORE
- HISC(RANK,1)=LEVEL
- Gosub HISCORE
- T[232,"You made it! Enter name!"]
- Extension_8_128A 2
- Extension_8_12B2 2,0 To 0,3
- Extension_8_1258 : Wait Vbl
- Screen 2 : For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
- Fade 2 To 2
- POS=1
- NAME$=Space$(12)
- Do
- Multi Wait
- I$=Inkey$
- Exit If I$=Chr$(13)
- If I$=Chr$(8) and POS>1 Then Dec POS : Mid$(NAME$,POS,1)=" "
- If I$>Chr$(31) and POS<13 Then Mid$(NAME$,POS,1)=I$ : Inc POS
- Screen 2
- Text 92,104+RANK*8+TB,NAME$
- Screen 0
- Extension_8_12B2 2,0 To 0,3
- Loop
- HISC$(RANK)=NAME$
- Screen 2 : For A=0 To 7 : Colour A+8, Colour(A) : Next : Screen 0
- Fade 1 To 2
- For A=0 To 15 : Multi Wait : Next
- PAG=1-PAG
- SAVHISC
- Return
- CREDIZ:
- Extension_8_121C 2,0
- T[80,"Welcome to Tubes"]
- T[104,"Written by Chris Hodges"]
- T[128,"Instructions"]
- T[144,"Simply build a pipeline by using"]
- T[152,"the tube-parts that appear."]
- T[160,"to make this more difficult, the"]
- T[168,"time rather limited!"]
- T[200,"This game was coded in one afternoon"]
- T[224,"Enjoy..."]
- Return
- HISCORE:
- Extension_8_121C 2,0
- T[80,"Best Tubers"]
- T[96," Rank Name Score Level"]
- For A=1 To 15
- T$= Extension_8_0EC8(A,2)+". "+HISC$(A)+" "+ Extension_8_0EB8(HISC(A,0),5)+" "+ Extension_8_0EB8(HISC(A,1),2)
- T[104+A*8,T$]
- Next
- Return
- End Proc
- Procedure T[Y,T$]
- Screen 2
- Text 160-Text Length(T$)/2,Y+TB,T$
- Screen 0
- End Proc
- Procedure GAMEOVER
- Shared SCORE
- Screen 2 : For A=0 To 7 : Colour A+8, Colour(A) : Next : Screen 0
- Fade 2 To 2
- Screen 2
- Extension_8_1204 11 : TB=Text Base
- Extension_8_121C 2,0
- T[128,"Game Over"]
- T[160,"Score: "+ Extension_8_0EB8(SCORE,5)]
- Screen 2 : Extension_8_1204 10 : TB=Text Base
- Extension_8_128A 2
- Extension_8_12B2 2,0 To 0,3
- Extension_8_1258 : Wait Vbl
- For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
- Fade 1 To 2
- For A=1 To 150 : Multi Wait : Next
- End Proc
- Procedure REBUILDGFX
- Shared LEVEL
- Fade 1 : For A=0 To 15 : Multi Wait : Next
- Cls 0
- Screen Copy 1,0,16,320,80 To 0,0,0
- Extension_8_1204 10
- TB=Text Base
- Ink 15,0 : Set Pattern -1
- Bar 0,64 To 320,256
- Put Block 6,0,64 : Put Block 6,15*16,64
- Put Block 7,14*16,64 : Put Block 7,304,64
- Put Block 8,0,240 : Put Block 8,15*16,240
- Put Block 9,14*16,240 : Put Block 9,304,240
- For A=1 To 13
- Put Block 3,A*16,64
- Put Block 3,A*16,240
- If A<4
- Put Block 3,A*16+15*16,64
- Put Block 3,A*16+15*16,240
- End If
- Next
- For A=5 To 14
- Put Block 2,0,A*16
- Put Block 2,14*16,A*16
- Put Block 2,15*16,A*16
- Put Block 2,304,A*16
- Next
- Limit Mouse X Hard(16),Y Hard(80) To X Hard(14*16-1),Y Hard(15*16-1)
- Screen 2
- Extension_8_1204 11 : TB=Text Base
- Extension_8_121C 2,0
- T[128,"Get ready for Level"+Str$(LEVEL)]
- Screen 2 : Extension_8_1204 10 : TB=Text Base
- Extension_8_128A 2
- Extension_8_12B2 2,0 To 0,3
- Extension_8_1258 : Wait Vbl
- For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
- Fade 1 To 2
- For A=1 To 50 : Multi Wait : Next
- Screen 2 : For A=0 To 7 : Colour A+8, Colour(A) : Next : Screen 0
- Fade 1 To 2
- For A=1 To 32 : Multi Wait : Next
- Extension_8_121C 0,3
- Fade 2 To 1
- End Proc
- Procedure SETTUBES
- Shared NUMTUBES,LEVEL,SCORE,TIME
- Shared WX,WY,SX,SY
- For Y=0 To 9
- For X=0 To 12
- F(X,Y)=0
- Next
- Next
- SX=Rnd(10)+1
- SY=Rnd(7)+1
- HOM=Rnd(3)+9
- Put Block HOM+1,SX*16+16,SY*16+80
- F(SX,SY)=HOM
- If HOM=9 Then WX=0 : WY=1
- If HOM=10 Then WX=0 : WY=-1
- If HOM=11 Then WX=1 : WY=0
- If HOM=12 Then WX=-1 : WY=0
- Sam Loop Off
- Gr Writing 0
- Ink 1,0
- Text 260,80+TB,"Level"
- Text 272,88+TB, Extension_8_0EB8(LEVEL,2)
- Text 260,104+TB,"Score"
- Text 260,112+TB, Extension_8_0EB8(SCORE,5)
- Text 260,128+TB,"Time:"
- Text 260,152+TB,"Tubes"
- Text 260,216+TB,"Next:"
- TIE2=Rnd(7)+1
- TIE3=Rnd(7)+1
- TIE4=Rnd(7)+1
- Timer=0
- For PARTS=1 To NUMTUBES
- Gr Writing 1
- TIE=TIE2
- TIE2=TIE3
- TIE3=TIE4
- If PARTS<NUMTUBES-2 Then TIE4=Rnd(7)+1 Else TIE4=0
- Ink 1,0 : Text 260,160+TB, Extension_8_0EB8(PARTS,2)+"/"+ Extension_8_0EB8(NUMTUBES,2)
- Ink 15,0 : Set Pattern -1 : Bar 256,224 To 303,239
- If LEVEL<15 Then Put Block TIE2+1,256,224 Else Put Block 1,256,224
- If LEVEL<10 Then Put Block TIE3+1,272,224 Else Put Block 1,272,224
- If LEVEL<5 Then Put Block TIE4+1,288,224 Else Put Block 1,288,224
- Repeat
- T=TIME-(Timer/50)
- If OT<>T
- T1=T/60 : T2=T mod 60
- DUMMY$=Str$(T1)+Str$(T2)
- OT=T
- If T>10
- Sam Play Extension_8_04F8(VO),7 : Add VO,1,0 To 2
- Else
- Sam Play Extension_8_04F8(VO),8 : Add VO,1,0 To 2
- End If
- Ink 1,0 : Text 260,136+TB, Extension_8_0EB8(T1,2)+":"+ Extension_8_0EB8(T2,2)
- Exit If T=0,2
- End If
- Multi Wait
- XM=(X Screen(X Mouse)-16)/16
- YM=(Y Screen(Y Mouse)-80)/16
- I$=Inkey$
- If I$="p"
- Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- TT=Timer
- Repeat
- Multi Wait
- MK=Mouse Key
- XM=(X Screen(X Mouse)-16)/16
- YM=(Y Screen(Y Mouse)-80)/16
- Sprite 0,X Hard(XM*16+16),Y Hard(YM*16+80),TIE+1
- Until(Inkey$<>"") or(MK>0)
- Repeat
- Multi Wait
- MK=Mouse Key
- Until MK=0
- Fade 1 To 1
- Timer=TT
- End If
- Exit If I$=Chr$(27),2
- MK=Mouse Key
- Sprite 0,X Hard(XM*16+16),Y Hard(YM*16+80),TIE+1
- If F(XM,YM)>0 and(MK<>0)
- Sam Play Extension_8_04F8(VO),4 : Add VO,1,0 To 2
- Repeat
- Multi Wait
- MK=Mouse Key
- Until MK=0
- End If
- Until MK
- Sam Play Extension_8_04F8(VO),5 : Add VO,1,0 To 2
- F(XM,YM)=TIE
- Put Block TIE+1,XM*16+16,YM*16+80
- Sprite Off
- Repeat
- Multi Wait
- MK=Mouse Key
- Until MK=0
- Next
- Sprite Off
- TIME=T
- End Proc
- Procedure WATERGO
- Shared SCORE,NUMTUBES,TIME,LEVDIF
- Shared WX,WY,SX,SY
- Ink 1,0 : Text 260,176+TB,"Done:"
- X=7 : Y=7 : TUBES=0
- Sam Loop Off
- Do
- Text 260,184+TB, Extension_8_0EC8(Min(TUBES*LEVDIF,NUMTUBES*100)/NUMTUBES,4)+"%"
- Sam Play 8,1
- OX=SX*16+16 : OY=SY*16+80
- Repeat
- Extension_8_1016 OX+X-WY*5,OY+Y-WX*5 To OX+X+WY*4,OY+Y+WX*4,8,%1000
- Wait Vbl
- Add X,WX : Add Y,WY
- If X=7 and Y=7
- F=Abs(F(SX,SY))
- If P(F,2)=2
- BX=X : BY=Y
- Sam Play Extension_8_04F8(VO),3 : Add VO,1,0 To 2
- For A=1 To 4
- Extension_8_1016 OX+BX-WY*5,OY+BY-WX*5 To OX+BX+WY*4,OY+BY+WX*4,8,%1000
- Wait Vbl
- Add BX,WX : Add BY,WY
- Next
- Gosub CHECKCURVE
- End If
- End If
- Until X<0 or X>15 or Y<0 or Y>15
- If X<0 Then Dec SX : Add X,16
- If Y<0 Then Dec SY : Add Y,16
- If X>15 Then Inc SX : Add X,-16
- If Y>15 Then Inc SY : Add Y,-16
- Exit If SX<0 or SX>12 or SY<0 or SY>9
- F=F(SX,SY) : F(SX,SY)=-Abs(F)
- If F<0
- Sam Play Extension_8_04F8(VO),6 : Add VO,1,0 To 2
- F=-F
- Add TUBES,3 : Add SCORE,100
- End If
- If Y=0 Then R=0
- If X=0 Then R=1
- If X=7 and Y=7 Then R=2
- If X=15 Then R=3
- If Y=15 Then R=4
- Exit If P(F,R)=0
- Add SCORE,25
- Gr Writing 1
- Ink 1,0 : Text 260,112+TB, Extension_8_0EB8(SCORE,5)
- Inc TUBES
- Loop
- Sam Stop
- Sam Loop Off
- Sam Play Extension_8_04F8(VO),2 : Add VO,1,0 To 2
- For B=0 To 31
- D(B,0)=X+SX*16+14+Rnd(4) : D(B,1)=Y+SY*16+78+Rnd(4)
- Next
- For A=1 To 32
- For B=0 To 31
- Extension_8_0388 D(B,0),D(B,1), Extension_8_039E(D(B,0),D(B,1)) or 8
- Add D(B,0),WX+(Rnd(2)-1)*WY
- Add D(B,1),WY+(Rnd(2)-1)*WX
- Next
- Next
- If TUBES*LEVDIF<NUMTUBES*100 Then Pop Proc[1]
- If TIME
- For T=TIME To 0 Step -1
- Add SCORE,5
- T1=T/60 : T2=T mod 60
- DUMMY$=Str$(T1)+Str$(T2)
- Ink 1,0 : Text 260,136+TB, Extension_8_0EB8(T1,2)+":"+ Extension_8_0EB8(T2,2)
- Ink 1,0 : Text 260,112+TB, Extension_8_0EB8(SCORE,5)
- Sam Play Extension_8_04F8(VO),7 : Add VO,1,0 To 2
- Wait 2
- Next
- End If
- Pop Proc[0]
- CHECKCURVE:
- If P(F,0) and WY=0 Then WY=-1 : WX=0 : Return
- If P(F,1) and WX=0 Then WY=0 : WX=-1 : Return
- If P(F,3) and WX=0 Then WY=0 : WX=1 : Return
- If P(F,4) and WY=0 Then WY=1 : WX=0 : Return
- Return
- End Proc
- Procedure CLRHISC
- For A=1 To 15
- HISC(A,0)=(16-A)*1000
- HISC(A,1)=(16-A)
- HISC$(A)="NO NAME YET!"
- Next
- End Proc
- Procedure LOAHISC
- If Exist("Tubes.his")=0 Then CLRHISC : SAVHISC : Pop Proc
- Extension_8_0456 "Tubes.his",8
- ST=Start(8)
- For A=1 To 15
- HISC$(A)=Peek$(ST,12) : Add ST,12
- HISC(A,0)=Deek(ST) : Add ST,2
- HISC(A,1)=Deek(ST) : Add ST,2
- Next
- End Proc
- Procedure SAVHISC
- Reserve As Work 8,15*(12+2+2)
- ST=Start(8)
- For A=1 To 15
- Poke$ ST,HISC$(A) : Add ST,12
- Doke ST,HISC(A,0) : Add ST,2
- Doke ST,HISC(A,1) : Add ST,2
- Next
- Extension_8_0472 "Tubes.his",8
- Erase 8
- End Proc